再强调一遍:Unix 不是 Linux!
责编:中文妹 | 作者:Mohamed Akram 原文:http://985.so/bysem
译者:CSDN - 弯月
网上很多有关POSIX和Unix工具的教程和指南总是假设你安装了Linux,或者更具体地说,安装了基于GNU的操作系统。然而,在探讨shell的行为、工具程序以及C的标准库时,这种假设往往会产生很大的影响。
虽然Linux的主导地位可能会让我们忽略Linux与这些操作系统的不同,但我们还是应该有一定的了解。在本文中,我将列出一些比较明显的差异。
1. Bash不是标准的shell
所有Unix系统上的默认shell都是sh,而不是bash。POSIX标准中介绍了sh中使用的语言。然而,在许多Linux系统上,sh只是指向bash的链接,这样可以用更接近标准的方式来使用bash,但人们依然可以使用一些无法在其他系统上使用的bash功能。如有疑问,请参阅标准。
2. Unix不包含长选项
Unix命令的选项有两种写法:短选项(只有一条短线-)与长选项(有两条短线--)。短选项一般会采用缩写的形式,而长选项一般会写出完整的单词。
许多工具程序都接受长选项,例如grep --count,对应的短选项是grep -c。前者是GNU的写法,其他系统通常不会采用这种写法,例如BSD。事实上,标准的getopts工具程序和相应的getopt C函数只支持短选项。
3. Make不同于GNU make
POSIX版本的make比GNU版本更有局限性。这个问题很难解决,因为规范的许多方面都有所欠缺,特别是逻辑或条件运算符。为了解决这个问题,你可以将一些逻辑移动到configure脚本,由这个脚本生成另一个Makefile,然后再包含到主文件中。此外,BSD的语法与GNU完全不同,例如条件语句。幸运的是,如果你只关注macOS和Linux,则可以放心地使用GNU的特性,因为macOS都是基于GNU的。
4. C编译器不同于GCC
在Makefiles文件中引用C编译器时,最好使用变量$(CC),在编译C++代码时,最好使用变量$(CXX)。大多数BSD系统的默认编译器如今都改为使用Clang了,而且不提供gcc可执行文件。如果是在Makefiles以外使用C和C++编译器,则可以直接使用cc和c++命令,这两个命令能在所有系统上工作。另外,搜索公众号编程技术圈后台回复“1024”,获取一份惊喜礼包。
5. GNU不同于Linux
二者略有不同,GNU接口不一定会出现在Linux系统上。例如,Alpine Linux发行版因其轻量级而流行于Docker容器中,它没有使用musl的GNU C库,而且放弃了GNU工具程序,改为使用BusyBox。因此,最好还是使用可移植的接口,即便你的目标只是Linux系统。
6. Unix不同于UNIX
最后,请注意,Unix与UNIX也不完全相同。后者是需要The Open Group认证的商标。在众多经过认证的操作系统中,最有名的是macOS,它遵循一切UNIX规范。也就是说,包括BSD在内的大多数类Unix系统以及GNU工具都在努力尽量遵守标准。
声明:本文部分素材转载自互联网,如有侵权立即删除 。
往期精彩
为什么建议大家使用 Linux 开发? 推荐一个酷炫的监控系统(附源码)! CentOS 7系统优化脚本!收藏吧! 打造一台“苹果范儿”的 Linux 系统,桌面美化攻略来了~ 谁再说不熟悉 Linux 命令,就把这个给他扔过去! 6 个最佳 Vim 插件管理器,你喜欢哪个? 详解 K8S 高可用部署,超详细! Windows 前高管吐槽 Win11:连文本都没对齐... Linux命令大全 又一个运营超过11年网盘,要永久关闭了... Shell 编程100例
喜欢本文的朋友们,欢迎长按下图,关注订阅号Linux中文社区
收看更多精彩内容